package top.infopub.mgr.mkt.service;

import com.github.pagehelper.Page;
import top.infopub.generic.GenericService;
import top.infopub.mgr.common.vo.RspVo;
import top.infopub.mgr.mkt.domain.ProjectDomain;
import top.infopub.mgr.mkt.domain.SetupProDomain;
import top.infopub.mgr.mkt.jsonvo.SetupJsonVo;
import top.infopub.mgr.mkt.vo.CollectProjectVo;
import top.infopub.mgr.mkt.vo.SetupProVo;
import top.infopub.model.common.MktSetupProInfo;
import top.infopub.model.mkt.*;
import top.infopub.security.vo.AuthorizationVO;

import java.text.ParseException;
import java.util.List;

public interface SetupProService extends GenericService<SetupPro, String> {

    /**
     * 根据条件查询分页数据
     * @param page
     * @param collectProjectVo
     * @return
     * @see
     */
    Page<ProjectDomain> selectPageByDomainWhere(Page<ProjectDomain> page, CollectProjectVo collectProjectVo) throws ParseException;

    /**
     * 根据条件查询我审批的分页数据
     * @param page
     * @param setupProVo
     * @return
     * @see
     */
    Page<SetupProDomain> selectMyCheckByDomainWhere(Page<SetupProDomain> page,
                                                    SetupProVo setupProVo);

    /**
     * 根据id查询立项详情
     * @param id 立项id
     * @return
     * @see
     */
    SetupProVo selectById(String id);

    /**
     * 新增立项记录
     * @param setupPro
     * @param setupProCoops
     * @param setupProSubs
     * @param fileAtts
     * @see
     */
    void addSetupPro(SetupPro setupPro, List<SetupProCoop> setupProCoops,
                     List<SetupProSub> setupProSubs, List<SetupProAtt> fileAtts);

    /**
     * 修改立项记录
     * @param setupPro
     * @param setupProCoops
     * @param setupProSubs
     * @param fileAtts
     */
    void editSetupPro(SetupPro setupPro, List<SetupProCoop> setupProCoops,
                     List<SetupProSub> setupProSubs, List<SetupProAtt> fileAtts,String submitType);
    /**
     * 查询可新建资格预审的立项记录
     * @return
     * @see
     */
    List<SetupPro> selectUsableSetupPro();

    /**
     * 根据项目编号查询是否已存在（processStatus in('1','9')）
     * @param proCode 项目编号
     * @return
     * @see
     */
    List<SetupPro> selectByProCode(String proCode);

    /**
     * 立项详情
     * @param id
     * @return
     */
    SetupJsonVo queryDetailById(String id);

    /**
     * 文件处理
     * @param list
     * @return
     */
    String[] fileAttaListToArray(List<ProjectAttachment> list);

    /**
     * 详情编辑
     * @param submitType 提交类型，0：保存，1：提交
     * @return
     */
    RspVo editSetupProDetail(ProjectInfo proInfo, SetupPro setupPro, List<AfterSummaryCoop> summCoopList,
                             ProjectSubInfo proSubInfo, List<ProjectRisk> riskList, PlotInfo plotInfo,
                             List<ProjectAttachment> attachmentList, Integer submitType, AuthorizationVO vo);

    /**
     * 查询市场立项通过的项目基础信息-公共
     * @return 返回proCode和proName
     */
    List<MktSetupProInfo> queryPublicProInfo();

    /**
     * 获取项目预结算项目列表
     * @return
     */
    List<MktSetupProInfo> getProjectBudgetMktList();


}
